package com.bzkj.basicinfo.mapper;

import com.bzkj.basicinfo.domain.warehouse.BarRelation;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 条码关系Mapper接口
 *
 * @author lixinyu
 * @date 2025-01-20
 */
public interface BarRelationMapper
{
    /**
     * 根据父级码查询当前码
     *
     * @param parentCodes 父级码列表
     * @return 条码关系列表
     */
    List<BarRelation> selectCurCodesByParentCodes(@Param("parentCodes") List<String> parentCodes);

    /**
     * 根据当前码查询父级码（反向查询）
     *
     * @param curCodes 当前码列表
     * @return 条码关系列表
     */
    List<BarRelation> selectParentCodesByCurCodes(@Param("curCodes") List<String> curCodes);

    /**
     * 批量插入条码关系数据
     *
     * @param barRelations 条码关系列表
     * @return 插入成功的数量
     */
    int insertBarRelations(@Param("barRelations") List<BarRelation> barRelations);

    /**
     * 根据追溯码查询条码关系
     *
     * @param barCode 追溯码
     * @return 条码关系列表
     */
    List<BarRelation> selectBarRelationsByBarCode(@Param("barCode") String barCode);

    /**
     * 检测追溯码的级别
     *
     * @param barCode 追溯码
     * @return 码级别信息
     */
    BarRelation selectCodeLevelByBarCode(@Param("barCode") String barCode);

    /**
     * 根据输入码查询其直接子码
     *
     * @param parentCode 父级码
     * @return 子码关系列表
     */
    List<BarRelation> selectDirectChildCodesByParentCode(@Param("parentCode") String parentCode);

    /**
     * 查询所有条码关系
     *
     * @return 条码关系列表
     */
    List<BarRelation> selectAllBarRelations();

    /**
     * 根据当前码列表查询条码关系
     *
     * @param curCodes 当前码列表
     * @return 条码关系列表
     */
    List<BarRelation> selectBarRelationsByCurCodes(@Param("curCodes") List<String> curCodes);

    /**
     * 根据当前码删除条码关系数据
     *
     * @param curCodes 当前码列表
     * @return 删除成功的数量
     */
    int deleteBarRelationsByCurCodes(@Param("curCodes") List<String> curCodes);

    /**
     * 检查追溯码是否已存在
     *
     * @param barCode 追溯码
     * @return 存在的数量
     */
    int checkBarCodeExists(@Param("barCode") String barCode);

    /**
     * 根据追溯码查询相关的单据ID
     *
     * @param barCode 追溯码
     * @return 单据ID列表
     */
    List<String> selectBillsIDsByBarCode(@Param("barCode") String barCode);

    /**
     * 根据单据ID查询条码关系
     *
     * @param billsID 单据ID
     * @return 条码关系列表
     */
    List<BarRelation> selectBarRelationsByBillsID(@Param("billsID") String billsID);

}
